package org.snail.other.mapper;

import org.apache.ibatis.annotations.Param;
import org.snail.employee.bean.EmployeesDO;
import org.snail.employee.bean.EmployeesDTOTrans;
import org.snail.other.bean.GroupCondition;
import org.snail.other.bean.GroupDO;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface GroupMapper {

    /**
     * 修改群
     * @param group
     */
    void updateGroup(GroupDO group);

    /**
     * 按条件分页查询
     * @param groupCondition
     * @return
     */
    List<GroupDO> findAllGroup(GroupCondition groupCondition);


    /**
     * 通过群名称查找群id 用来判断当前群是否存在
     * @param name
     * @return
     */
    Long findGroupIdByGroupName(String name);

    /**
     * 多条件查询群组
     * @param groupCondition  以groupId(主键)为条件 查询所有员工
     * @return
     */
    List<EmployeesDO> findEmpByGroupId(GroupCondition groupCondition);


    /**
     * 删除群
     * @param groupCondition  group的查询条件
     * @return int 返回删除条数
     */
    int deleteGroup(GroupCondition groupCondition);

    /**
     * 保存、修改群
     * @param groupDO 需要保存的群对象
     */
    void saveGroup(GroupDO groupDO);

    /**
     * 根据chatID查找group
     * @param chatId  会话id
     * @return
     */
    GroupDO findGroupByChatId(String chatId);

    /**
     * 快捷框搜索群组
     * @param groupName  群组名称
     * @return list<GroupDO> 返回群组列表
     */
    List<GroupDO> findGroupQuick(String groupName);

    /**
     * 根据id,查询群组信息
     * @param groupId 群组id
     * @return GroupDO
     */
    GroupDO findGroupById(Long groupId);

    /**
     * 根据群类型找到相关群组信息
     */
    List<GroupDO> findGroupsByGroupType(@Param("groupType") int groupType);

    /**
     * 钉钉群内部查询
     */
    List<GroupDO> findAPIGroupInfoByGroupId(@Param("groupId") Long groupId);

    /**
     * 此方法不对  需要通过dingId才能查找chatId
     * @param empId
     * @return
     */
    String findChatIdByEmpId(@Param("empId") Integer empId);

    List<Map> findEmpGroupMap();

    List<EmployeesDO> findEmpListByDingId(@Param("groupId") Long groupId);

    List hasDeptIdFromDel(Long id);

    void reuseGroup(Long id);

    List<Long> findALLGroupIds();
}